Cybertrace
Интеграция с Kaspersky Cybertrace
Данное руководство описывает быструю настройку интеграции Solar TI Feeds Agent с Kaspersky Cybertrace для автоматической загрузки индикаторов компрометации (IoC).
Предварительные требования
- Установленный и настроенный Solar TI Feeds Agent
- Учётные данные для доступа к Kaspersky Cybertrace (Basic-аутентификация)
- Действительный JWT-токен для доступа к Solar TI Feeds API
Конфигурация интеграции
Интеграция автоматизирует выгрузку индикаторов из Solar TI Feeds в Kaspersky Cybertrace. Для подключения к СЗИ используется аутентификация типа BasicAuth.
Основные компоненты интеграции:
| Компонент | Назначение |
|---|---|
FeedsAPIGenerator | Загрузка данных из Solar TI Feeds API |
FeedsDBSink | Сохранение данных в локальную SQLite-базу |
FeedsDBGenerator | Чтение данных из базы для обработки |
FeedsFailedDBGenerator | Повторная обработка ошибочных записей |
Mapper | Преобразование JSON-данных в плоскую структуру |
Filter | Фильтрация индикаторов по условиям |
CyberTraceSink | Отправка данных в Kaspersky Cybertrace |
Переменные окружения
Для работы интеграции необходимо определить следующие переменные окружения в файле docker-compose.yml:
| Переменная | Назначение |
|---|---|
TIC_AGENT_API_URL | Адрес сервера Solar TI Feeds API |
TIC_AGENT_API_TOKEN | JWT-токен для аутентификации |
TIC_AGENT_SERVICE_URL | URL-адрес сервера Kaspersky Cybertrace (например, https://cybertrace.example.com:8080) |
TIC_AGENT_SERVICE_USER | Имя пользователя для Basic-аутентификации в Cybertrace |
TIC_AGENT_SERVICE_PASSWORD | Пароль для Basic-аутентификации в Cybertrace |
Структура pipeline для Cybertrace
В актуальной версии конфигурации используется один комплексный pipeline, а не отдельные pipeline для каждого фида. Pipeline состоит из двух частей:
Pipeline 1: feeds-api (загрузка данных)
| Компонент | Параметры | Описание |
|---|---|---|
FeedsAPIGenerator | schedule = scheduleCron10MinCfg | Запрос данных каждые 10 минут |
types = ["ipv4", "domain", "md5", "sha1", "sha256"] | Типы загружаемых индикаторов | |
FeedsDBSink | Сохранение в SQLite |
Pipeline 2: feeds-cybertrace (обработка и выгрузка)
| Компонент | Параметры | Описание |
|---|---|---|
FeedsDBGenerator | schedule = scheduleCron5MinCfg | Чтение данных из БД каждые 5 минут |
FeedsFailedDBGenerator | schedule = scheduleCron10MinCfg | Повторная обработка ошибок |
Mapper | jsonpath + rules | Преобразование JSON в необходимый формат |
Filter | Условие фильтрации | Отбор индикаторов для отправки |
CyberTraceSink | supplier = "ti_feeds_v2" | Отправка в Cybertrace |
Условие фильтрации (Filter)
В cybertrace_pipeline.pkl настроен фильтр, который пропускает только следующие индикаторы:
filters {
"""
action == "DELETE" || any(feeds_names, {lower(#) in ["vpn", "tor", "proxy", "fstec"]}) || zone == "MALICIOUS"
"""
}
Условия отбора:
- Индикаторы с действием DELETE
- Индикаторы из фидов: vpn, tor, proxy, fstec
- Индикаторы с зоной MALICIOUS
Справочник параметров для Kaspersky Cybertrace
Параметры ServerCfg (подключение к Cybertrace)
| Параметр | Тип данных | Значение по умолчанию | Обязательность | Описание | Пример |
|---|---|---|---|---|---|
credentials | BasicAuth | JwtAuth | HeaderAuth | NoAuth | new NoAuth {} | Да | Данные для аутентификации | credentials = new BasicAuth { username = "user" password = "pass" } |
address | Address | Да | URL-адрес сервера Cybertrace | address = "https://cybertrace.example.com:8080" | |
timeout | Duration | 1.min | Нет | Таймаут запросов | timeout = 120.s |
retries | Int | 5 | Нет | Количество повторных попыток | retries = 3 |
retryTimeout | Duration | 10.s | Нет | Начальная задержка между попытками | retryTimeout = 5.s |
retryMaxTimeout | Duration | 50.s | Нет | Максимальная задержка между попытками | retryMaxTimeout = 30.s |
insecureSkipVerify | Boolean | false | Нет | Отключение проверки SSL-сертификата | insecureSkipVerify = true |
Параметры CyberTraceSink
| Параметр | Тип данных | Значение по умолчанию | Обязательность | Описание |
|---|---|---|---|---|
server | ServerCfg | Да | Конфигурация подключения к серверу Cybertrace | |
columns | Listing<String> | Да | Список колонок для отправки в Cybertrace | |
supplier | String | Да | Идентификатор поставщика данных (например, "ti_feeds_v2") | |
confidence | Int | 80 | Нет | Уровень доверия к индикаторам (1-100) |
retention | Duration | 0.min | Нет | Время жизни индикаторов (0 = бессрочно) |
vendor | String | "Solar" | Нет | Имя вендора |
cleanList | Boolean | false | Нет | Очищать список перед загрузкой |
Полный код конфигурационного файла для интеграции с Cybertrace
📄 Нажмите, чтобы показать/скрыть cybertrace_pipeline.pkl
amends "package://pkg.pkl-lang.org/github.com/pipelane/pipelaner/pipelaner@1.3.1#/Pipelaner.pkl"
import "package://pkg.pkl-lang.org/github.com/pipelane/pipelaner/pipelaner@1.3.1#/source/Components.pkl"
import "../internal/agent.pkl"
import "../internal/templates.pkl"
pipelines {
new Components.Pipeline {
name = "feeds-api"
inputs {
new agent.FeedsAPIGenerator {
name = "feeds-api-generator"
server = templates.serverJwtApiCfg
schedule = templates.scheduleCron10MinCfg
filter = new agent.FeedsAPIRequestParams {
types = new Listing {
"ipv4"
"domain"
"md5"
"sha1"
"sha256"
}
}
}
}
sinks {
new agent.FeedsDBSink {
name = "feeds-db-sink"
inputs {
"feeds-api-generator"
}
}
}
}
new Components.Pipeline {
name = "feeds-cybertrace"
inputs {
new agent.FeedsDBGenerator {
name = "feeds-cybertrace-generator"
schedule = templates.scheduleCron5MinCfg
}
new agent.FeedsFailedDBGenerator {
name = "feeds-failed-cybertrace-generator"
feedGenName = "feeds-cybertrace-generator"
schedule = templates.scheduleCron10MinCfg
}
}
transforms {
new agent.Mapper {
name = "feeds-cybertrace-mapper"
inputs {
"feeds-cybertrace-generator"
"feeds-failed-cybertrace-generator"
}
jsonpath = new Mapping {
["feeds_names"] = "$.feeds[*]..name"
["actions"] = "$.feeds[*]..action"
["heuristics"] = "$.network.heuristics[*].description"
["verdicts"] = "$.file.verdicts[*]"
["file_names"] = "$.file.file_identifiers[*]"
}
rules = new Mapping {
["id"] = "id"
["value"] = "value"
["action"] =
"""
any(actions, {# in ["UPDATE", "CREATE"]}) ? "UPDATE" : "DELETE"
"""
["first_seen"] = "first_seen"
["last_seen"] = "last_seen"
["description"] = "description"
["categories"] = "categories"
["detects"] = """
len(heuristics) > 0 ? heuristics : len(verdicts) > 0 ? verdicts : ""
"""
["zone"] = "zone"
["related_reports"] = """
let reports = map(related_objects, {#.type == "REPORT" ? replace(#.value,"\\n"," ") : ""});
join(filter(reports, {# != ""}), ",")
"""
["related_threat_actors"] = """
let actors = map(related_objects, {#.type == "THREAT_ACTOR" ? #.value : ""});
join(filter(actors, {# != ""}), ",")
"""
["related_file_hashes"] = """
let files = map(related_objects, {#.type in ["MD5", "SHA1", "SHA256", "FILE"] ? #.value : ""});
join(filter(files, {# != ""}), ",")
"""
["related_indicators"] = """
let indicators = map(related_objects, {#.type in ["IPV4", "IPV6", "DOMAIN", "URL", "SOCKETV4", "SOCKETV6"] ? #.value : ""});
join(filter(indicators, {# != ""}), ",")
"""
["portal_link"] = "portal_url"
["contexts"] = "contexts"
["attributes"] = "attributes"
["vulnerabilities"] = "cve"
}
}
new agent.Filter {
inputs {
"feeds-cybertrace-mapper"
}
name = "feeds-cybertrace-filter"
filters {
"""
action == "DELETE" || any(feeds_names, {lower(#) in ["vpn", "tor", "proxy", "fstec"]}) || zone == "MALICIOUS"
"""
}
}
}
sinks {
new agent.CyberTraceSink {
name = "cybertace-sink"
inputs {
"feeds-cybertrace-filter"
}
server = new agent.ServerCfg {
credentials = new agent.BasicAuth {
username = read("env:TIC_AGENT_SERVICE_USER")
password = read("env:TIC_AGENT_SERVICE_PASSWORD")
}
address = read("env:TIC_AGENT_SERVICE_URL")
insecureSkipVerify = true
}
columns = new Listing {
"first_seen"
"last_seen"
"description"
"feeds_names"
"categories"
"detects"
"zone"
"file_names"
"related_reports"
"related_threat_actors"
"related_file_hashes"
"related_indicators"
"portal_link"
"contexts"
"attributes"
"vulnerabilities"
}
supplier = "ti_feeds_v2"
}
}
}
}
settings = templates.baseSettings
Мониторинг результатов работы интеграции
После запуска агента убедитесь в корректности работы интеграции:
| Проверка | Действие |
|---|---|
| Проверка логов агента | Просмотрите логи в директории ./workdir/logs на наличие ошибок или предупреждений |
| Верификация в Cybertrace | В интерфейсе Kaspersky Cybertrace убедитесь, что индикаторы загружаются с указанным supplier = "ti_feeds_v2" |
| Проверка фильтрации | Убедитесь, что загружаются только индикаторы, соответствующие условиям фильтра |
Примечание: Логи агента также можно просмотреть в реальном времени с помощью команды
docker logs {CONTAINER_NAME}.